<?php

namespace App\Http\Middleware;

use App\Http\Model\User;
use App\Http\Model\Hint;
use Closure;
use Illuminate\Http\Request;

class Authenticate
{
    /**
     * 用户模型实例.
     *
     * @var User
     */
    protected $userModel;

    /**
     * 构造函数，注入用户模型实例.
     *
     * @param User $user 用户模型实例
     */
    public function __construct(User $user)
    {
        $this->userModel = $user;
    }

    /**
     * 处理传入的请求。
     *
     * 该方法首先尝试获取当前登录用户。如果用户未登录，则返回一个未授权的响应；
     * 否则，继续处理下一个中间件或路由操作。
     *
     * @param Request $request HTTP请求对象
     * @param Closure $next 下一个中间件或路由操作
     * @param string|null $guard 守卫名称（可选）
     * @return mixed 返回下一个中间件或路由操作的结果或一个HTTP响应
     */
    public function handle(Request $request, Closure $next, $guard = null)
    {
        $curUser = $this->userModel->get_current_user();
        if ($curUser == null) {
            return preEnAES(Hint::LOGIN_OUT,[],'请重新登录');
        }
        
        $request->attributes->add(['user' => $curUser]);
        return $next($request);
    }
}